import { getWordList } from '@/pages/WordGame/service';
import { udp } from '@cscec/udp-mobile-ui';
import { useState, useEffect, useCallback } from 'react';

// 游戏关卡数据类型
export interface GameLevel {
  word: string;
  image: string;
  alt?: string;
}

/**
 * 自定义Hook：管理游戏数据
 * 可以从接口获取数据，也可以使用默认数据
 */
export const useGameData = () => {
  const [gameData, setGameData] = useState<GameLevel[][]>([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  /**
   * 从接口获取游戏数据
   * 在实际项目中，这里应该替换为真实的API调用
   */
  const fetchGameData = useCallback(async () => {
    try {
      setLoading(true);
      setError(null);
       const data = await getWordList({textbookId:udp.getQueryValue('id')});
       console.log(data)
       if(data.length==0){
        udp.message('当前单词学习还无法解锁单词消消乐哦，请先努力学习单词吧！')
        udp.close()
        return
       }
       const gameNewData = data.map((item:[])=>{
        return item.map((it:any)=>{
          return {
            word:it.name,
            image:it.imgUrl,
            alt:it.answer
          }
        })
       })
       //console.log(gameNewData)
      //const apiData = defaultGameData;
      
      setGameData(gameNewData);
    } catch (err) {
      console.error('Failed to fetch game data:', err);
      setError('加载游戏数据失败，请检查网络连接');
      udp.close()
    } finally {
      setLoading(false);
    }
  }, []);

  /**
   * 手动刷新数据
   */
  const refreshData = useCallback(() => {
    fetchGameData();
  }, [fetchGameData]);

  /**
   * 更新游戏数据
   * 可以通过这个函数动态更新游戏数据
   */
  const updateGameData = useCallback((newData: GameLevel[][]) => {
    setGameData(newData);
  }, []);

  /**
   * 添加新的关卡
   */
  const addLevel = useCallback((level: GameLevel[]) => {
    setGameData(prev => [...prev, level]);
  }, []);

  /**
   * 删除指定关卡
   */
  const removeLevel = useCallback((levelIndex: number) => {
    setGameData(prev => prev.filter((_, index) => index !== levelIndex));
  }, []);

  /**
   * 更新指定关卡
   */
  const updateLevel = useCallback((levelIndex: number, level: GameLevel[]) => {
    setGameData(prev => 
      prev.map((item, index) => index === levelIndex ? level : item)
    );
  }, []);

  // 组件挂载时获取数据
  useEffect(() => {
    fetchGameData();
  }, [fetchGameData]);

  return {
    gameData,
    loading,
    error,
    refreshData,
    updateGameData,
    addLevel,
    removeLevel,
    updateLevel,
  };
};